package com.example.flow.pipeline.core;

import com.example.flow.pipeline.model.result.FlowResult;
import com.example.flow.pipeline.model.PipeContext;

/**
 * @Desprication: 管道接口，包括添加阀门方法以及开启管道方法
 * 执行流模型由 Pipeline（管道）/ Valve（阀门）/ Context（上下文） 组成
 * @Author: YangBin
 * @Date: created in 11:10 2020/2/23
 * @Modify By:
 */
public interface PipeLine {

    String tailValveName = "tail-valve";

    PipeContext pipeContext();

    /**
     * 添加阀门
     * @param name 阀门name
     * @param handler 阀门控制器
     */
    PipeLine addLast(String name, AbstractFlowHandler handler);

    /**
     * 开启管道
     * @return FlowResult
     */
    FlowResult<?> start();

}
